<?php
/**
 * 按照最佳宽高比例生成图片的PNG缩略图
 *
 * 注：
 * 缩放算法和ImageMagic convert -resize -thumbnial一样
 * 缩略图的mtime和原始文件相同。
 *
 * @param string $srcFile 原始文件路径
 * @param int $width 缩略图最大宽度(像素)
 * @param int $height 缩略图最大高度(像素)
 * @param string $thumbFile 缩略图的路径
 * @return boolean
 *
 */
function makeThumb($srcFile,$width,$height,$thumbFile){
    $img= NewMagickWand();
    if(!MagickReadImage($img,$srcFile)){
        return false;
    }
    $oriHeight = MagickGetImageHeight($img);
    $oriWidth = MagickGetImageWidth($img);
    $xratio = $width/$oriWidth;
    $yratio = $height/$oriHeight;
    if($xratio < $yratio) {
        $height = floor($oriHeight*$xratio);
    }else{
        $width = floor($oriWidth*$yratio);
    }
    //去掉颜色配置等注释信息
    MagickRemoveImageProfiles($img);
    //使用PointFilter方式缩放到5倍的目标大小
    MagickSampleImage($img,$width*5,$height*5);
    //Resize到目标尺寸,同时锐化处理
    MagickResizeImage($img,$width,$height,MW_PointFilter,0.45);
    MagickSetImageFormat($img,'image/png');
    $ok = MagickWriteImage($img,$thumbFile);
    DestroyMagickWand($img);
    $mTime = filemtime($srcFile);
    @touch($thumbFile,date('U',$mTime));
    return $ok;
}
?>